/**
 * 操作方法slice
 * 1.不在原数组上操作
 * 2.返回的是操作之后的数组
 * 3.返回的是开始到结束的位置之间的所有项，不包括结束位置
 * 4.跟前面的concat一样，可以利用slice去对数组做一个看似深拷贝的浅拷贝
 */
var sliceArr = [1, 2, 3, 4]
var sliceArr1 = sliceArr.slice(1, 3)
console.log('sliceArr', sliceArr) // [1, 2, 3, 4]
console.log('sliceArr1', sliceArr1) //  [2, 3]
// 利用slice进行数组的拷贝   
var copySliceArr = sliceArr.slice()
console.log('copySliceArr', copySliceArr) // [1, 2, 3, 4]
copySliceArr[3] = 5
console.log('copySliceArr', copySliceArr) // [1, 2, 3, 5]
// 原数组没有改变，看似是一种深拷贝，其实是一种浅拷贝
console.log('sliceArr', sliceArr) // [1, 2, 3, 4]

// 证明是浅拷贝
var sliceReady = [{age: '30'}, {age: '25'}]
var copy = sliceReady.slice()
// 0: {age: "30"}
// 1: {age: "25"}
console.log('sliceReady', sliceReady)
// 0: {age: "30"}
// 1: {age: "25"}
console.log('copy', copy)
// 做出修改，然后推翻之前的认识
copy[0].age = '26'
// 0: {age: "26"}
// 1: {age: "25"}
// 改变了copy的数组，原数组也发生了改变，说明slice()是一种浅拷贝
console.log('sliceReady', sliceReady)

/**
 操作方法splice()
 1.可以用于数组的删除，插入，替换
 2.是在原数组上操作
 3.返回原始数组中删除的项组成的数组  
 */
// 删除操作
var arr1 = [1, 2, 3, 4]
var s1 = arr1.splice(0, 1)
console.log('arr1', arr1) // [2, 3, 4] // 原数组发生了改变
console.log('s1', s1) // [1] // 返回的被删除项组成的数组

// 插入操作
var arr2 = [1, 2, 3, 4]
var s2 = arr2.splice(0, 0, 'name', 'age', 'lee')
console.log('arr2', arr2) // ["name", "age", "lee", 1, 2, 3, 4] // 原数组发生了改变
console.log('s2', s2) // [] // 返回的被删除项组成的数组，因为是插入操作，所以未删除任何项

// 替换操作
var arr3 = [1, 2, 3, 4]
var s3 = arr3.splice(0, 2, 'name')
console.log('arr3', arr3) // ["name", 3, 4] // 原数组发生了改变
console.log('s3', s3) // [1, 2] // 返回的被删除项组成的数组
